from socket import *
import pygame
from PIL import Image
from PIL import ImageFile
from io import BytesIO

ImageFile.LOAD_TRUNCATED_IMAGES = True

def main():
    pygame.init()
    size=[800,600]
    screen=pygame.display.set_mode(size)
    # 1.创建tcp_client_socket 套接字对象
    tcp_client_socket = socket(AF_INET,SOCK_STREAM)
    # 作为客户端，主动连接服务器较多，一般不需要绑定端口

    # 2.连接服务器
    tcp_client_socket.connect(("192.168.4.1",100))
    b1 = bytearray()
    a = 0
    while True:
        """无限循环可以实现无限聊天"""
        # 3.向服务器发送数据
        #meg = input("请输入要发送的消息：")
        #tcp_client_socket.send(meg.encode())  　　　　　　# 在linux中默认是utf-8编码
        # 在udp协议中使用的sendto() 因为udp发送的为数据报，包括ip port和数据，           
        # 所以sendto()中需要传入address，而tcp为面向连接，再发送消息之前就已经连接上了目标主机

        # 4.接收服务器返回的消息
        recv_data = tcp_client_socket.recv(1436)  # 此处与udp不同，客户端已经知道消息来自哪台服务器，不需要用recvfrom了

        if recv_data:
            if len(recv_data) >1:
                if recv_data[1] == 216 and recv_data[2] == 255:
                    print("ok")
                    if b1:
                        bytes_stream = BytesIO(b1)
                        roiimg = Image.open(bytes_stream)
                        roiimg.save("1.jpg")
                        b1.clear()
                        b1.extend(recv_data)
                        bg = pygame.image.load('1.jpg')
                        screen.blit(bg, (0, 0))
                        pygame.display.update()
                    else:
                        b1.extend(recv_data)
                else:
                    b1.extend(recv_data)
            else:
                b1.extend(recv_data)
        else:
            print("对方已离线。。")
            break
    

    tcp_client_socket.close()


if __name__ == '__main__':
    main()
